package com.youlu.campus.entity;

import com.kuaidi100.sdk.response.SubscribePushData;
import com.youlu.campus.base.base.EntityBase;
import lombok.Data;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

@Data
@Document(collection = "order_info")
public class OrderInfo extends EntityBase {
    /**
     * 定义版本
     */
    private String version = "v1";
    /**
     * 用户账号信息
     */
    @Indexed
    private String accountInfoId;
    @Indexed
    private String activityId;

    /**
     * 短信通知 活动名称
     */
    private String smsActivityName;

    /**
     * 是否开启支付完成短信通知
     */
    private Boolean paymentSmsEnabled = Boolean.FALSE;

    /**
     * INVITE:志愿者,QA:荣誉证书
     */
    @Indexed
    private String taskBizType;
    /**
     * 订单号
     */
    @Indexed
    protected String orderNo;

    /**
     * 1 自主下单 2 客服下单
     */
    protected Integer source;

    /**
     * 购买数量
     */
    protected Integer goodsNum = 1;

    /**
     * 总价 分
     */
    protected Integer totalFee;
    /**
     * 优惠总价 分
     */
    protected Integer discountFee = 0;
    /**
     * 原价费用
     */
    protected Integer originalTotalFee;
    /**
     * 活动券折扣费用
     */
    protected Integer couponDiscountFee;
    /**
     * 活动券个数
     */
    protected Integer couponNum;
    /**
     * 双证补贴费用
     */
    protected Integer subsidyOfDoubleCa;
    /**
     * 限时扣减金额 分
     */
    protected Integer deductionFee = 0;
    /**
     * 支付价格 分
     */
    protected Integer payPrice;

    /**
     * 支付状态,0:失败,1:成功
     */
    protected String payStatus;

    /**
     * 支付方式 默认QQ钱包
     */
    protected String payType;

    /**
     * 支付时间
     */
    @Indexed
    protected Date payTime;

    /**
     * 取消时间
     */
    protected Date cancelTime;

    /**
     * 用户openId QQ微信h5支付 才会返回
     */
    protected String openId;
    /**
     * appId
     */
    protected String appId;
    /**
     * 微信appId
     */
    protected String wechatAppId;
    /**
     * 平台
     */
    protected String platform;
    /**
     * 支付回调交易ID
     */
    @Indexed
    protected String transactionId;

    /**
     * 客户端ID
     */
    protected String clientIp;

    /**
     * 邮箱地址
     */
    protected String email;

    /**
     * 订单备注
     */
    protected String remark;
    /**
     * 邮费,单位分
     */
    protected Integer expressFee = 0;
    /**
     * 商品数量
     */
    protected Integer num;
    /**
     * 订单主图
     */
    protected String imageUrl;
    /**
     * 订单备注,富文本信息UserCaInfoServiceImpl
     */
    protected String comments;
    /**
     * 状态,0:待付款,1:已付款,2:制作中,3:待发货,4:待收货,5:已收货,6:订单完成,7:订单关闭,8:售后中,9:退款中,10:部分已发货
     */
    @Indexed
    private String status;

    /**
     * 退款状态,0:未退款,1:退款申请,2:退款中,3:退款完成,4:待返货,7:部分退款中
     */
    @Indexed
    private String refundStatus = "0";
    /**
     * 退款发起方:platform:平台,visitor:用户
     */
    @Indexed
    private String refundBizType;
    /**
     * 退款方式,one-line:线上,off-line:线下
     */
    @Indexed
    private String refundWay = "one-line";
    /**
     * 物流公司
     */
    private String logisticsCompany;
    /**
     * 物流编号
     */
    @Indexed
    private String logisticsNo;
    /**
     * 发货方式,1:快递,2:到店自提,3:无物流
     */
    private String freightType = "1";

    /**
     * 物流公司
     */
    private String refundLogisticsCompany;
    /**
     * 物流编号
     */
    private String refundLogisticsNo;
    /**
     * 退款时间
     */
    private Date refundTime;
    /**
     * 退款金额
     */
    private Integer refundFee;
    /**
     * 姓名
     */
    protected String name;

    /**
     * 手机号
     */
    protected String mobile;

    /**
     * 邮政编码
     */
    protected String postcode;
    /**
     * 省
     */
    protected String province;
    /**
     * 市
     */
    protected String city;
    /**
     * 区
     */
    protected String area;

    protected String address;

    protected String title;
    /**
     * 子订单
     */
    @Transient
    protected List<OOrderInfo> oOrderInfos = new ArrayList<>();
    /**
     * 大学ID
     */
    @Indexed
    protected String universityId;
    /**
     * 大学名
     */
    protected String universityName;
    /**
     * 订单提示
     */
    protected String tips = "...";
    /**
     * 物流提示语
     */
    protected String logisticsTips;
    /**
     * 赠品信息
     */
    protected String gift;
    /**
     * 审核状态 0: 无需要审核,1:待审核,2:审核通过,3:审核拒绝
     */
    @Indexed
    protected Integer verifyStatus;
    /**
     * 标签
     */
    private List<String> tags = new ArrayList<String>();
    /**
     * 标签搜索字段
     */
    @Indexed
    private String tagsSearchStr;

    private String userCaInfoId;
    /**
     * 退款后台操作描述,富文本
     */
    private String refundDesc;
    /**
     * 是否发送短信通知
     */
    private Boolean sendMsg = Boolean.FALSE;
    /**
     * 证书打印的名字
     */
    private String caPrintName;
    /**
     * 等级
     */
    @Transient
    private String level;
    /**
     * 材质
     */
    @Transient
    private String edition;
    /**
     * 报名手机号
     */
    private String signUpMobile;
    /**
     * 报名姓名
     */
    private String signUpName;
    // @Transient
    private Integer itemPrice = 0;
    /**
     * 邮费提示语
     */
    private String expressFeeTips;
    /**
     * 地址是否可修改
     */
    @Transient
    private Boolean canModifyAddress = Boolean.FALSE;
    /**
     * 是否可退款
     */
    @Transient
    private Boolean canRefund = Boolean.FALSE;
    /**
     * 订单来源,self,third
     */
    private String bizFrom = "self";
    /**
     * 渠道,gqgood:国青,maike:麦克
     */
    private String channel = "gqgood";
    /**
     * 商户号
     */
    @Indexed
    private String mechantId;
    /**
     * 商户名:梦想跳动、国际路有、春芽，厚山
     */
    private String mechantName;
    /**
     * 支付宝账户
     */
    private String alipayAccount;
    /**
     * 用户退款理由
     */
    private String refundComment;
    /**
     * 退款申请时间
     */
    private Date refundApplyTime;
    /**
     * 退款申请人类型platform:平台,visitor
     */
    private String refundApplyUserType = "platform";

    private String mark;
    /**
     * 退款确认图片
     */
    private String refundConfirmUrl;
    /**
     * 是否弹退款确认图片
     */
    private Boolean showRefundConfirmUrl = Boolean.TRUE;
    /**
     * 三方订单号
     */
    private String thirdOrderNo;
    /**
     * 操作人
     */
    private String optName;
    /**
     * 审核人
     */
    private String verifyOptName;
    /**
     * 退款支付渠道
     */
    private String refundPayChannel;
    /**
     * 是否可退款,客服在后台开启
     */
    private Boolean supportRefund = Boolean.FALSE;
    /**
     * 偏远地区邮费
     */
    private Integer extraExpressFee = 0;
    /**
     * 物流描述
     */
    private String expressDesc = "顺丰/邮政航空EMS邮寄";

    private Boolean dataMark = Boolean.FALSE;
    /**
     * 0 全部退款 1部分退款
     */
    private Integer refundType;

    @Transient
    private Boolean customerService = Boolean.FALSE;
    /**
     * 子订单编号
     */
    @Transient
    private List<String> subOrderNos = new ArrayList<>();
    /**
     * 收否售后发货
     */
    @Transient
    private Boolean postSale;
    /**
     * 微信通知时间
     */
    private Date payNotifyTime;
    /**
     * 合单ID
     */
    @Indexed
    private String singleOrderBatchId;
    /**
     * 合单状态,1:待合单,2:合单完成
     */
    @Indexed
    private String singleOrderStatus;
    @Indexed
    private List<String> logisticsNos = new ArrayList<>();
    /**
     * 货币类型,1:数字人民币,2:人民币,3:积分,4:会员权益,5:以物换物,6:免费
     */
    private String moneyType = "2";
    /**
     * 订单分类,ca:证书,item:文创
     */
    @Indexed
    private String category = "ca";

    @Transient
    private String recieveName;

    @Transient
    private String recieveMobile;
    /**
     * 虚拟商品名称
     */
    @Transient
    private String virtualGoodsName;

    private Integer sharingProfitAmount;

    /**
     * 分账状态
     * 0：待处理
     * 1: 已分账
     * 2:关闭
     * 3:取消
     * 4:已退回
     * 5:不分账
     */
    @Transient
    private Integer sharingProfitStatus = 0;

    /**
     * 发货物流管控是否提示
     * true 显示 false 不展示
     */
    private Boolean postController = Boolean.FALSE;

    /**
     * 订单备注
     */
    @Transient
    private String orderComment;

    /**
     * 显示最新物流信息
     */
    @Transient
    private SubscribePushData lastLogisticsResult;
    /**
     * 限时扣减结束日期
     */
    protected Date deductionEndDate;
    /**
     * 是否有扣减
     */
    @Transient
    private Boolean hasDeduction = false;
    /**
     * 倒计时剩余时间
     */
    @Transient
    private Long deductionDiffTime;

    /**
     * 发货地址
     */
    private String from;
    /**
     * 退款申请平台
     */
    @Indexed(background = true)
    private String refundApplyPlatform;
    /**
     * 退款申请AppId
     */
    private String refundApplyAppId;
    /**
     * 子商品ID
     */
    @Transient
    private List<String> childItemIds = new ArrayList<>();
    /**
     * 发货模式V1:老模式,V2:合单模式
     */
    @Transient
    private String mode = "V1";
    /**
     * 是否注销
     */
    @Indexed(background = true)
    private Boolean writeOffed = Boolean.FALSE;
    /**
     * 注销任务ID
     */
    private String writeTaskId;
    /**
     * 证书编号同步批次ID
     */
    @Indexed(background = true)
    private String caSyncBatchId;
    /**
     * 修复订单批次号
     */
    private String reDoBatchId;
    /**
     * 是否显示售后
     */
    @Transient
    private Boolean openAfterSales = Boolean.FALSE;
    /**
     * 售后提示信息
     * 1:已付款,2:制作中,3:待发货,4:待收货,5:已收货
     */
    @Transient
    private HashMap<String, String> afterSalesInfos = new HashMap<>();
    @Transient
    private boolean showCaInfo = false;
}
